Video compression refers to reducing the quantity of data used to represent video images and often combines image compression and motion compensation. A video codec is a device or software that enables video compression and/or decompression for digital video. Traditionally, video codecs apply various spatial and temporal transforms (such as discrete cosine transforms and the like) on the two-dimensional frames that make up a video sequence in order to reduce the raw data that must be stored on a storage medium or transmitted across a network.
Computer graphics research has explored a variety of techniques for the creation of realistic, yet simulated, images. In this context, a realistic image would be an image substantially approximating a photograph of a real, three-dimensional scene. As research has progressed, the continual inclusion of more and more features of real scenes within image generation algorithms (features such as opacity, surface textures, soft shadows) has led to increasingly realistic images. One of the first successful image synthesis approaches, called ray tracing, started with the basic physics of lens design. Ray tracing involves determining the path taken by rays of light starting at a light source, which then pass through a hypothetical lens to a focal point. The process of following the light rays is called ray tracing. When initially developed, the method of ray tracing was computationally intensive and impractical for existing computer resources. As increasingly powerful and inexpensive computers evolved, however, ray tracing algorithms received greater attention. Simulating the actual physics of image generation, through substantial numbers of calculations, became practical and attractive for image synthesis. The methods of ray-tracing algorithms have been augmented with powerful techniques for handling many different kinds of optical phenomena.
Ray tracing starts with a few basic elements: a three-dimensional scene lit by one or more light sources, a viewing screen comprising an array of pixel elements (a window onto the scene), and a hypothetical viewing eye which looks out on the scene through the viewing screen. The goal of any image synthesis technique is to correctly color each pixel of the viewing screen such that looking at the screen from the vantage of the hypothetical eye would recreate the original three-dimensional scene as closely as possible.
As generally implemented, ray tracing is backward ray tracing, whereby a backward-going ray from the hypothetical viewing eye passes through a pixel on the viewing screen and strikes an object within the scene to be rendered. By working backwards, a rendering algorithm essentially determines the point on a surface where a light ray has struck and then determines from where the light ray originated. Having found the first surface which the backward ray struck, the rendering algorithm determines all light striking that point on that surface and how the incident light is affected by the particular surface characteristics of the struck object. The combined light illumination of the object can be passed back along the original ray through the particular pixel into the viewer's eye, allowing the pixel to be appropriately shaded. Of course, the different intensities, directions, colors and origins of the light striking the point on the object's surface is infinite; path tracing seeks to sample the light coming from different sources efficiently so that a few samples can replace exhaustively looking at all light rays, while still recovering enough useful information to construct a close estimate of the scene's photometry.